package com.fbinggun.fattribute.api;

import com.fbinggun.fattribute.attribute.IAttribute;
import com.fbinggun.fattribute.data.DataManage;
import com.fbinggun.fattribute.data.EntityData;
import com.fbinggun.fattribute.effect.IEffect;
import com.fbinggun.fattribute.status.Modifier;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.plugin.Plugin;

import java.util.List;
import java.util.Map;

public class API {


    /**
     * 获取实体属性信息
     * @param entity 实体
     * @return
     */
    public static EntityData getEntityData(LivingEntity entity){
        return DataManage.getData(entity);
    }
    //更新实体属性

    /**
     * 更新实体属性
     * @param entity
     */
    public  static void update(LivingEntity entity){
        getEntityData(entity).up();
    }

    //为实体添加效果

    /**
     * 为实体添加 自定义效果
     * @param entityData 实体信息
     * @param effect 效果
     */
    public static void addEffect(EntityData entityData, IEffect effect){
        entityData.addEffect(effect);
    }
    //为实体添加效果

    /**
     * 为实体添加自定义效果
     * @param entity 实体
     * @param effect 效果
     */
    public static void addEffect(LivingEntity entity, IEffect effect){
        getEntityData(entity).addEffect(effect);
    }

    //获取属性值

    /**
     * 获取属性值
     * @param entityData 实体信息
     * @param key 键（lore）
     * @return
     */
    public static double getAttributeValue(EntityData entityData,String key){
        return entityData.getValue(key);
    }

    //获取玩家全部属性

    /**
     * 获取实体的全部属性数据
     * @param entityData 实体信息
     * @return
     */
    public static Map<IAttribute,Double> getAttributeAllValue(EntityData entityData){
        return entityData.getStatusMap().getAttributeMap();
    }

    //为实体添加属性、

    /**
     * 为实体添加属性
     * @param entityData 实体信息
     * @param modifier 属性修饰符
     */
    public static void addAttribute(EntityData entityData,Modifier modifier){
        entityData.getStatusMap().addModifier(modifier);
    }

    /**
     * 新建 属性修饰符
     * @param id ID 可随意 建议 插件名_xxx
     * @param plugin 插件
     * @param map 属性数据
     * @return
     */
    public static Modifier newModifier(String id, Plugin plugin, Map<IAttribute,Double> map){
        return new Modifier(id,plugin,map);
    }
    /**
     * 新建 属性修饰符
     * @param id ID 可随意 建议 插件名_xxx
     * @param plugin 插件
     * @param map 属性数据
     * @return
     */
    public static Modifier newModifier(String id, Plugin plugin, List<String> map){
        return new Modifier(id,plugin,map);
    }

    /**
     * 删除属性修饰符
     * @param entityData 实体数据
     * @param id 修饰符id
     */
    public static void delModifier(EntityData entityData,String id){
        entityData.getStatusMap().removeModifier(id);
        return;
    }

    /**
     * 删除属性修饰符
     * @param entityData 实体数据
     * @param plugin 插件
     */
    public static void delModifier(EntityData entityData,Plugin plugin){
        entityData.getStatusMap().removeModifier(plugin);
        return;
    }

}
